java上传文件并保存到服务器----大文件上传

一般的文件上传(不依赖spring)

 /**
     * 保存文件
     *
     * @param path      文件绝对路径
     * @param fileBytes 文件字节数据
     * @throws ApiServiceException
     */
    public void save(String path,  byte [] fileBytes) throws ApiServiceException {
  
        //保存文件到对应位置
        File dir = new File(path);
        if (!dir.getParentFile()
                .exists()) {
            boolean mkdir = dir.getParentFile()
                               .mkdirs();
            if (!mkdir) {
                // 文件父路径创建失败,父路径['{0}']
                throw IctsServiceError.FILE_SAVE_ERROR.toException(
                        i18n(i18nPreFix + "file.parent.path.create.failure",
                                dir.getParentFile().getAbsolutePath()));
            }
        }
        try {
            FileUtils.writeByteArrayToFile(dir, fileBytes);
        } catch (IOException e) {
        //抛出异常  
        }
    }

依赖spring

/**
     * 保存文件
     *
     * @param path 文件绝对路径
     * @param file 文件数据
     * @throws ApiServiceException
     */
    private void save(String path, MultipartFile file) throws ApiServiceException {
        //保存文件到对应位置
        File dir = new File(path);
        if (!dir.getParentFile().exists()) {
            dir.getParentFile().mkdirs();
        }
        try {
            file.transferTo(dir);
        } catch (IOException e) {
            //抛出异常
        }
    }

大文件上传(不依赖spring)

/**
     * 保存文件
     *
     * @param path      文件绝对路径
     * @param inputStream 文件流
     * @throws ApiServiceException
     */
    public void save(String path, InputStream inputStream) throws ApiServiceException {
        //保存文件到对应位置
        File dir = new File(path);
        boolean fileExists = dir.getParentFile() .exists();
        if (!fileExists) {
            boolean mkdir = dir.getParentFile().mkdirs();
            if (!mkdir) {
                // 文件路径创建失败,
            }
        }
        try (FileOutputStream fos = new FileOutputStream(dir)) {
            byte[] b = new byte[1024];
            while ((inputStream.read(b)) != -1) {
                fos.write(b);
            }
        } catch (IOException e) {
            //文件流转读取失败
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                  流关闭失败
                }
            }
        }
    }

从spring 的MultipartFile获取字节数组或者inputstream流

MultipartFile file
file.getBytes();
file.getInputStream()

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java可以通过使用Servlet来实现文件上传,并将上传的文件保存服务器目录中。 以下是一个简单的实现步骤: 1. 在HTML表单中添加文件上传控件: ```html <form method="POST" enctype="multipart/form-data" action="upload"> <input type="file" name="file" /> <input type="submit" value="Upload" /> </form> ``` 2. 创建Servlet来处理文件上传请求: ```java @WebServlet(name = "UploadServlet", urlPatterns = { "/upload" }) @MultipartConfig(fileSizeThreshold = 1024 * 1024 * 2, // 2MB maxFileSize = 1024 * 1024 * 10, // 10MB maxRequestSize = 1024 * 1024 * 50) // 50MB public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取上传文件对象 Part filePart = request.getPart("file"); // 获取上传文件名 String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString(); // 获取服务器目录路径 String uploadDirectory = getServletContext().getRealPath("/") + "uploads/"; // 创建上传目录 File uploadPath = new File(uploadDirectory); if (!uploadPath.exists()) { uploadPath.mkdir(); } // 保存上传文件服务器目录 String filePath = uploadDirectory + fileName; File file = new File(filePath); InputStream inputStream = filePart.getInputStream(); OutputStream outputStream = new FileOutputStream(file); byte[] buffer = new byte[4096]; int bytesRead = -1; while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } outputStream.close(); inputStream.close(); // 返回上传成功信息 response.getWriter().println("File " + fileName + " has been uploaded successfully!"); } } ``` 在这里,我们使用了`@MultipartConfig`注解来配置上传文件的大小限制,同时也使用了`getPart`方法来获取上传文件对象,`getSubmittedFileName`方法来获取上传文件名,`getServletContext`方法来获取服务器上下文路径,`File`类来创建上传目录,以及`InputStream`和`OutputStream`来实现文件的读取和保存。 此外,这里还需要在`web.xml`文件中添加如下配置: ```xml <web-app> <multipart-config> <max-file-size>10485760</max-file-size> <!-- 10MB --> <max-request-size>52428800</max-request-size> <!-- 50MB --> <file-size-threshold>2097152</file-size-threshold> <!-- 2MB --> </multipart-config> </web-app> ``` 这样,当上传的文件大小超过限制时,就会返回相应的错误信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值